package com.eazyimage.lab.service.impl;

import com.eazyimage.lab.entity.FileData;
import com.eazyimage.lab.entity.Response;
import com.eazyimage.lab.entity.parmas.UploadFileMsgParam;
import com.eazyimage.lab.mapper.FileDataMapper;
import com.eazyimage.lab.service.UploadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.util.HashMap;

/**
 * @author Pzi
 * @create 2022-05-03 15:42
 */
@Service
public class UploadServiceImpl implements UploadService {

    @Autowired
    private FileDataMapper fileDataMapper;

    @Override
    public Response upload(MultipartFile file, UploadFileMsgParam uploadFileMsgParam) {


        //  1.将文件存储到本机的某个位置
        //  2.将文件相关的信息存储到数据表中

        if (file.isEmpty()) {
            //  返回状态码0
            return Response.fail();
        }

        String OriginalFilename = file.getOriginalFilename(); // 文件的完整名字 123.jpg
        System.out.println(OriginalFilename);
        System.out.println(OriginalFilename.lastIndexOf(".") + 1);
        //  定义文件的名字，防止上传的文件名字出现重复，在文件名后面加上一个随机数字
//        String fileName = OriginalFilename.substring(0,OriginalFilename.lastIndexOf(".")) + "("+(int)(Math.random()*1000)+")" + "." + OriginalFilename.substring(OriginalFilename.lastIndexOf(".") + 1);
        String fileName = OriginalFilename;

        //  定义文件存储的路径，存入以userName来命名的文件夹中
        String userName = uploadFileMsgParam.getUserName();
        String filePath = "D:\\"+ userName +"\\";
        File dest = new File(filePath + fileName);
        //  如果该目录不存在，则创建
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
        try {
            //  将文件存储到filePath路径下
            file.transferTo(dest);
        } catch (Exception e) {
            e.printStackTrace();
        }

        //  上传完之后，将上传的文件相关的数据写入到数据表中
        FileData fileData = new FileData();
        fileData.setId(0);
        fileData.setUserName(userName);
        fileData.setFilePath(filePath+fileName);
        fileData.setDescription(uploadFileMsgParam.getDesc());

        fileDataMapper.insert(fileData);

        HashMap<String, String> map = new HashMap<>();
        map.put("filePath", filePath+fileName);

        return Response.success(map);
    }
}
